home *** CD-ROM | disk | FTP | other *** search
/ Workbench Add-On / Workbench Add-On - Volume 1.iso / Dev / Oberon / source / ProjectOberon / Modules.mod < prev    next >
Text File  |  1995-07-02  |  2KB  |  80 lines

  1. (*************************************************************************
  2.  
  3.      $RCSfile: Modules.mod $
  4.   Description: Clone of the Project Oberon Modules module. Based on the
  5.                interface created by Niklaus Wirth (NW 16.2.86 / 22.9.92).
  6.  
  7.    Created by: fjc (Frank Copeland)
  8.     $Revision: 1.1 $
  9.       $Author: fjc $
  10.         $Date: 1995/02/21 13:49:54 $
  11.  
  12.   Copyright © 1995, Frank Copeland.
  13.   This file is part of the Oberon-A Library.
  14.   See Oberon-A.doc for conditions of use and distribution.
  15.  
  16. *************************************************************************)
  17.  
  18. MODULE Modules;
  19.  
  20. IMPORT SYSTEM, Kernel;
  21.  
  22. CONST
  23.   ModNameLen* = 32;
  24.  
  25. TYPE
  26.   Module* = POINTER TO ModDesc;
  27.   Command* = PROCEDURE;
  28.   ModuleName* = ARRAY ModNameLen OF CHAR;
  29.  
  30.   ModDesc* = RECORD
  31.     next*: Module;
  32.     name*: ModuleName;
  33.     module : Kernel.Module;
  34.   END;
  35.  
  36. VAR
  37.   res* : INTEGER;
  38.   ModList : Module;
  39.  
  40. PROCEDURE ThisMod* (name: ARRAY OF CHAR): Module;
  41.  
  42.   VAR mod : Kernel.Module; newMod : Module;
  43.  
  44. BEGIN
  45.   res := 1; newMod := ModList;
  46.   WHILE (newMod # NIL) & (newMod.name # name) DO
  47.     newMod := newMod.next
  48.   END;
  49.   IF newMod = NIL THEN
  50.     mod := Kernel.FindModule (name);
  51.     IF mod # NIL THEN
  52.       NEW (newMod);
  53.       COPY (name, newMod.name); newMod.module := mod;
  54.       newMod.next := ModList; ModList := newMod;
  55.       res := 0
  56.     END
  57.   ELSE
  58.     res := 0
  59.   END;
  60.   RETURN newMod
  61. END ThisMod;
  62.  
  63. PROCEDURE ThisCommand*(mod: Module; name: ARRAY OF CHAR): Command;
  64.  
  65.   VAR cmd : Kernel.Command;
  66.  
  67. BEGIN
  68.   cmd := Kernel.FindCommand (mod.module, name);
  69.   IF cmd # NIL THEN res := 0; RETURN SYSTEM.VAL (Command, cmd.proc)
  70.   ELSE res := 1; RETURN NIL
  71.   END;
  72. END ThisCommand;
  73.  
  74. PROCEDURE Free*(name: ARRAY OF CHAR; all: BOOLEAN);
  75. BEGIN
  76.   res := 0
  77. END Free;
  78.  
  79. END Modules.
  80.